#!/usr/bin/perl
#
# AGI Script that prompts the user for an ip address, pings the ip, and reports back to the user.
#
# Requires the Asterisk::AGI and Net::Ping::External perl modules
#
# Written by: James Golovich <james@gnuinter.net>
#
#

use Asterisk::AGI;
use Net::Ping::External qw(ping);

$AGI = new Asterisk::AGI;

my %input = $AGI->ReadParse();

my $finished = 0;

$AGI->exec('Festival', '"Enter the eye-p address you wish to ping."');

my $ipaddr = '';
my $x = 0;
while (!$finished) {
	my $input = chr($AGI->wait_for_digit('5000'));
	if ($input =~ /^[0-9\*\#]$/) {
		if ($input =~ /^[\*\#]$/) {
			$x++;
			if ($x > 3) {
				$finished = 1;
			} else {
				$ipaddr .= '.';
			}
		
		} else {
			$ipaddr .= $input;
		}
	} else {
			#must have timed out
			$finished = 1;
	}

	if ( length($ipaddr) > 14) {
		$finished = 1;
	}
}

	if ($ipaddr !~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/) {
		$AGI->exec('Festival', "\"Invalid Address: $ipaddr\"");
		exit 0;
	}

	$AGI->exec('Festival', '"Please wait"');
	if (ping(host => "$ipaddr", timeout => 2)) {
		$AGI->exec('Festival', '"Host is up"');
	} else {
		$AGI->exec('Festival', '"Host is down"');
	}
